local limitKey = KEYS[1] -- 限流key
local holdKey = KEYS[2]  -- 用户是否秒杀过该商品
local storeKey = KEYS[3] -- 秒杀库存

local uid = ARGV[1] -- 用户id
local maxLimit = ARGV[2] -- 最大限流

-- 判断用户是否秒杀过该商品
local exists = tonumber(redis.call("exists",holdKey))  --若key存在则返回1
if exists == 1 then
    -- 说明该用户秒杀过该商品
    return -1
end

--判断是否限流
local limit = tonumber(maxLimit)   -- 限流的阀值  1000
local current = tonumber(redis.call("get",limitKey) or "0")
if current + 1 > limit then
    -- 流量超过了阀值，进行限流
    return -2
end
-- 更新redis中的限流  请求数+1
redis.call("incr",limitKey)
-- 给他设置过期时间
redis.call("expire",limitKey,60)

--判断库存是否充足
local stores = tonumber(redis.call("get",storeKey))
if stores<=0 then
    -- 库存不足
    return -3
end

-- 秒杀成功库存 -1
redis.call("decr",storeKey)

--记录用户秒杀的商品
redis.call("set",holdKey,uid)

return 1